//
//  ZXSortViewController.swift
//  loveBee
//
//  Created by zhangxing on 2017/8/12.
//  Copyright © 2017年 zhangXing. All rights reserved.
//

import UIKit

class ZXSortViewController: UIViewController {
    //实例化一个ZXSortViewModel类型的对象,用来调用加载数据的方法
    var sortViewModel: ZXSortViewModel = ZXSortViewModel()
    
    //懒加载左边的扫一扫item
    lazy var scanItem: UIBarButtonItem = {
        
        //创建自定义的view
        let contentView = UIView.init(frame: CGRect(x: 0, y: 0, width: 55, height: 60))
        
        //创建button(接下来需要自定义button)
        //我们想要调整button的位置,就设置x值就可以了
        let btn = ZXButton.init(frame: CGRect(x: -15, y: 0, width: contentView.width!, height: contentView.height!))
        
        //设置button的图片
        btn.setImage(#imageLiteral(resourceName: "icon_black_scancode"), for: .normal)
        
        //设置btn的文字
        btn.setTitle("扫一扫", for: .normal)
        
        //设置btn的文字大小
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 12)
        
        //设置btn文字居中
        btn.titleLabel?.textAlignment = .center
        
        //设置btn的文字颜色
        btn.setTitleColor(UIColor.black, for: .normal)
        
        //添加事件
        btn.addTarget(self, action: #selector(clickScanItem(btn:)), for: .touchUpInside)
        
        //将btn添加到contentView中
        contentView.addSubview(btn)
        
        //设置UIBarButtonItem的自定义视图为contentView
        let scanItem = UIBarButtonItem.init(customView: contentView)
        
        
        
        return scanItem
        
    }()
    
    
    
    //懒加载导航栏右侧的searchItem
    lazy var searchItem: UIBarButtonItem = {
        
        let contentView = UIView.init(frame: CGRect(x: 0, y: 0, width: 55, height: 60))
        
        //创建自定义的button
        let btn = ZXButton.init(frame: CGRect(x: 0, y: 0, width: contentView.width!, height: contentView.height!))
        
        btn.setImage(#imageLiteral(resourceName: "icon_search"), for: .normal)
        
        btn.setTitle("搜索", for: .normal)
        
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 12)
        
        btn.titleLabel?.textAlignment = .center
        
        btn.setTitleColor(UIColor.black, for: .normal)
        
        //添加事件
        btn.addTarget(self, action: #selector(clickSearchItem), for: .touchUpInside)
        
        contentView.addSubview(btn)
        
        let searchItem = UIBarButtonItem.init(customView: contentView)
        
        return searchItem
        
    }()
    //懒加载rightSpacer,当我们在调整UIBarButtonItem的位置的时候,可以让x点的值改变,当然也可以使用rightBarButtonItems设置rightSpacer
    lazy var rightSpacer: UIBarButtonItem = {
        
        //设置导航栏的rightBarButttonItem的间隙spacer
        let rightSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
        
        rightSpacer.width = -15
        
        return rightSpacer
        
    }()
    
    
    
    //懒加载导航栏的titleView
    //  MARK: --   懒加载
    private lazy var titleLabel: UILabel = {
        
        //实例化一个label
        let label = UILabel(fontSize: 17, textColor: UIColor.darkGray)
        
        label.layer.borderColor = UIColor.gray.cgColor
        
        label.layer.borderWidth = 1
        
        //灰色阴影
        //        label.shadowColor = UIColor.blue
        //阴影的偏移量
        //        label.shadowOffset = CGSize(width: 1, height: 1)
        
        //设置label可与用户交互
        label.isUserInteractionEnabled = true
        
        //设置点击手势
        let tap = UITapGestureRecognizer(target: self, action: #selector(clickTitleLabel))
        
        //给label添加点击手势
        label.addGestureRecognizer(tap)
        
        //name1
        let name1 = "配送至 :"
        
        //name2
        let name2 = " 宏仕发商务楼  "
        
        //拼接title
        let title = name1 + name2
        
        //把字符串转成富文本
        let attributedStr: NSMutableAttributedString = NSMutableAttributedString(string: title)
        
        //获取name1名字的范围
        let name1Range = (title as NSString).range(of: name1)
        
        //获取name2名字的范围
        let name2Range = (title as NSString).range(of: name2)
        
        //给指定name1Range范围添加对应的富文本属性
        attributedStr.addAttributes([NSForegroundColorAttributeName: UIColor.brown, NSFontAttributeName: UIFont.systemFont(ofSize: 12)], range: name1Range)
        
        //给指定name2Range范围添加对应的富文本属性
        attributedStr.addAttributes([NSForegroundColorAttributeName: UIColor.brown, NSFontAttributeName: UIFont.systemFont(ofSize: 17)], range: name2Range)
        
        //1.创建图片对象
        var image = UIImage(named: "allowBlack")
        
        //1.1   给定重置图片的大小
        let reSize = CGSize(width: 14, height: 10)
        
        //1.2   重新设置图片的大小
        //         image = image?.reSizeImage(reSize: reSize)
        image = image?.scaleImage(scaleSize: 0.7)
        //2.创建文本附件
        let textAttachment = NSTextAttachment()
        
        //3.设置文本附件所需要的图片
        textAttachment.image = image
        
        //4.根据文本附件创建富文本
        let attributedString = NSAttributedString(attachment: textAttachment)
        
        //5.拼接富文本
        attributedStr.append(attributedString)
        
        //设置label的富文本属性attributedText
        label.attributedText = attributedStr
        
        
        //设置居中
        label.textAlignment = .center
        
        //自适应大小
        label.sizeToFit()
        
        return label
    }()
    
    //懒加载左侧的tableView
    lazy var leftTableView: UITableView = UITableView()
    
    //懒加载右侧的tableView
    lazy var rightTableView: UITableView = UITableView()
    
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //网络数据下载回调
        sortViewModel.handleCellData { [unowned self] (isSucceed) in
            if isSucceed {
                
                
                
                self.leftTableView.reloadData()
                
                self.rightTableView.reloadData()
            }
            else {
                
                print("没有数据哎")
            }
        }


        //搭建导航栏
        setupNav()
        
        //搭建UI
        self.setupTableView()
        
    }
    
    
    
    
    //  MARK: --   搭建nav
    private func setupNav() {
        //设置导航栏的leftBarButtonItem
        navigationItem.leftBarButtonItem = scanItem
        
        //设置导航栏的rightBarButtonItem
        navigationItem.rightBarButtonItems = [rightSpacer, searchItem]
        
        //设置导航栏的titleView
        navigationItem.titleView = titleLabel
        
        //修改导航栏按钮颜色(没实现)
        //        navigationController?.navigationBar.tintColor = UIColor.init(hex: 0xFFDE00)
        
        //修改导航栏文字颜色(没实现)
        //        self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
        
        
        //修改导航栏背景色1(可以)
        //        self.navigationController?.navigationBar.barTintColor = UIColor.init(hex: 0xFFDE00)
        
        //设置导航栏的背景图片2(可以)
//        navigationController?.navigationBar.setBackgroundImage(#imageLiteral(resourceName: "v2_coupon_verify_normal"), for: .default)
        
                
    }
    
    
    // MARK - 搭建左右tableView
    private func setupTableView() {
        // 透明状态栏的延伸,tableView从导航栏底部开始
        self.edgesForExtendedLayout = .bottom
        
        //设置左.右侧的tableView
        leftTableView = UITableView(frame: CGRect.init(x: 0, y: 0, width: 100, height: KHeight - 64), style: .plain)
        rightTableView = UITableView(frame: CGRect.init(x: 100, y: 0, width: KWidth - 100, height: KHeight - 49 - 64), style: .plain)
        
        
        //设置左.右侧tableView的数据源方法
        leftTableView.dataSource = self
        rightTableView.dataSource = self
        
        
        //注册左.右侧的tableView的cell
        leftTableView.register(UINib.init(nibName: "ZXLeftTableViewCell", bundle: nil), forCellReuseIdentifier: leftSortTableViewCell)
        rightTableView.register(UINib.init(nibName: "ZXRightTableViewCell", bundle: nil), forCellReuseIdentifier: rightSortTableViewCell)
        
        
        //设置rightTableView的行高
        rightTableView.rowHeight = 77
        
        
        
        //添加左.右侧的tableView
        self.view.addSubview(leftTableView)
        self.view.addSubview(rightTableView)
        
        
    }


    
    //  MARK: --   点击扫一扫按钮执行的方法
    @objc private func clickScanItem(btn: UIButton) {
        
        print("点击了首页的扫一扫")
        
    }
    
    @objc private func clickSearchItem() {
        
        print("点击了首页的搜索按钮")
    }
    
    @objc private func clickTitleLabel() {
        
        print("点击了导航栏的titleView")
    }

    
}

//MARK: -- 数据源方法extension
extension ZXSortViewController: UITableViewDataSource {
    
    //组数
    func numberOfSections(in tableView: UITableView) -> Int {
        //如果是左侧的tableView
        if tableView == leftTableView {
            
            return 1
        }
        //如果是右侧的tableView
        else {
            return sortViewModel.allRightViewModelList.count
        }
        
    }
    
    
    //行数
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //如果是左侧的tableView
        if tableView == leftTableView {
//            print(sortViewModel.sortLeftCellModelList ?? 0)
            
            //这里不能强制解包,因为刚开始进入这个分类界面的时候,会先运行这个tableView的数据源方法,但此时网络数据还没有加载完成,所以只有nil行,会崩溃,我们应该先问问sortLeftCellModelList数组中有没有值,如果没有值就先赋默认值,然后在网络数据加载完成以后,我们需要再执行reloadData()方法,重新调用一下数据源方法
            return (sortViewModel.sortLeftCellModelList?.count) ?? 15
        }
        //如果是右侧的tableView
        else {
            return sortViewModel.allRightViewModelList[section].count
        }
    }
    
    
    //每一行显示的cell
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //如果是左侧的tableView
        if tableView == leftTableView {
            let leftCell = tableView.dequeueReusableCell(withIdentifier: leftSortTableViewCell, for: indexPath) as! ZXLeftTableViewCell
            
//            leftCell.backgroundColor = RandomColor()
            
            //传递模型,需要在leftCell中定义一个sortLeftCellModel,用来接收sortLeftCellModelList模型数组中的元素
            leftCell.sortLeftCellModel = sortViewModel.sortLeftCellModelList?[indexPath.row]
            
            
            
            return leftCell
        }
        //如果是右侧的tableView
        else {
            
            let rightCell = tableView.dequeueReusableCell(withIdentifier: rightSortTableViewCell, for: indexPath) as! ZXRightTableViewCell
            
//            rightCell.backgroundColor = RandomColor()
            
            rightCell.sortRightCellViewModel = sortViewModel.allRightViewModelList[indexPath.section][indexPath.row]
            
            return rightCell
        }
    }
}












